package avicit.bdp.dgs.mdm.dao;

import avicit.bdp.common.base.BaseDAO;
import avicit.bdp.dgs.mdm.dto.TopicDTO;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @金航数码科技有限责任公司
 * @作者：developer
 * @邮箱：developer@avic-digital.com
 * @创建时间： 2023-12-04
 * @类说明：TopicDAO
 * @修改记录：
 * @注意事项：
 * @主要功能：主题DAO
 */
@Repository
public interface TopicDAO extends BaseDAO<TopicDTO> {
    /**
     * 分页查询-根据条件查询主题列表
     *
     * @param code
     * @param status
     * @return
     */
    Page<TopicDTO> queryTopicByCond(@Param("keyWords") String keyWords, @Param("code") String code, @Param("status") Integer status);

    /**
     * 列举主题列表
     *
     * @param type     模型类型
     * @param keyWords
     * @param code
     * @return
     */
    List<TopicDTO> getTopicListByCond(@Param("type") Integer type, @Param("keyWords") String keyWords, @Param("code") String code);

    /**
     * 获取主题列表
     * 注意：
     * 1、数据维护模块使用，仅可查询启用状态的主题 && 已绑定模型的主题列表 && 模型表已发布的主题，否则未发布的模型会导致查询报错
     *
     * @param keyWords
     * @param code
     * @return
     */
    List<TopicDTO> getTopicListByModelStatus(@Param("type") Integer type, @Param("keyWords") String keyWords, @Param("code") String code);

    /**
     * 查询未使用的主题列表
     *
     * @param type     模型类型
     * @param keyWords
     * @param code
     * @return
     */
    List<TopicDTO> getUnusedTopicList(@Param("type") Integer type, @Param("keyWords") String keyWords, @Param("code") String code);

    /**
     * 删除/批量删除主题
     *
     * @param idList 主题ID列表
     * @return
     */
    int deleteTopicByCond(@Param("idList") List<String> idList);

    /**
     * 判读名称或编码是否重复
     *
     * @param topicId 主题ID
     * @param name    主题名称
     * @param code    主题编码
     * @return
     */
    long selectNameCount(@Param("topicId") String topicId, @Param("name") String name, @Param("code") String code);

    /**
     * 统计主题总量
     *
     * @return
     */
    long countTopic();

    /**
     * 删除前检查，如果主题已关联模型表，不允许删除
     *
     * @param topicId
     * @return
     */
    long checkBeforeDelete(@Param("topicId") String topicId);
}
